/**
 * 
 */
package com.hq.cms.web.controllers;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hq.cms.domain.Article;
import com.hq.cms.domain.Comments;
import com.hq.cms.domain.User;
import com.hq.cms.service.ArticleService;
import com.hq.cms.service.CommentService;
import com.hq.cms.utils.FileUploadUtil;
import com.hq.cms.web.Constant;

/**
 * 说明:
 * 
 * @author howsun ->[howsun.zhang@gmail.com]
 * @version 1.0
 *
 * 2018年1月10日 下午2:40:38
 */
@Controller
@RequestMapping("/my")
public class UserController {
	@Resource
	private ArticleService articleService;
	@Resource
	private CommentService commentService;
	
	@RequestMapping({"/", "/index", "/home"})
	public String home(){
		return "user-space/home";
	}
	
	@RequestMapping({"/profile"})
	public String profile(){
		return "user-space/profile";
	}
	
	
	// 1：需要在类中完成 《我的文章 列表展示功能》
	@RequestMapping("/blogs")
	public String blogs(Model  model,HttpServletRequest request,@RequestParam(value="cpage",defaultValue="1")Integer cpage) {
		// 需要在此方法中将数据展示出来 并发送到前台页面
		// 因为展示的文章与登录用户相关 所以 需要在作用域中 获取登录用户的信息
		User user = Constant.getLoginUser(request);
		// 在cms_article表中获取登录用户的文章所以 需要作用域中的用户id
		PageHelper.startPage(cpage,10);
		List<Article> list=articleService.getsByUserId(user.getId());
		PageInfo pi=new PageInfo(list);
		model.addAttribute("blogs", list);
		model.addAttribute("pi", pi);
		return "user-space/blog_list";
	}
	
	//类上已经有  /my/blog/edit  ==>/my/blog/edit
	// 由列表页面跳转到  文章发布页面
	@RequestMapping("/blog/edit")
	public String toEdit(Model model,Integer id) {
//		判单id是否有值 决定是添加还是修改：id没值是添加有值是修改
		if(id==null) {
			// 因为要用springForm和jsr303 所以需要在跳转页面中 绑定模型
			model.addAttribute("blog", new Article());
		}else {
			Article article=articleService.getArticleById(id);
			model.addAttribute("blog",article);
		}
		return "user-space/blog_edit";

	}
	@RequestMapping("/blog/save")
	public String blogSave(@Valid @ModelAttribute("blog")Article blog,BindingResult br,Model model
			,MultipartFile file,HttpServletRequest request) {
		if(br.hasErrors()) {
			// 当验证不通过 直接跳回到 编辑页面
			return "user-space/blog_edit";
		}else {
			// 当验证通过我们要执行的操作
			//1:执行文件上传
			// 获取到 文件上传的路径
			String load=null;
			if(file.getOriginalFilename().length()>0) {// 当有图片时 才上传图片
				load = FileUploadUtil.load(request.getSession(), file, Constant.UPLOAD_DIR);
			}
			//2:获取前台的数据 准备完成添加操作
			//2.1 获取 登录用户的信息
			User user = Constant.getLoginUser(request);
			//2.2前台数据的获取
			blog.setPicture(load);//赋值图片路径
			blog.setAuthor(user); // 赋值当前登录的用户
			System.out.println(blog);
			// id为null 是添加 不为空是修改
			if(blog.getId()==null) {
				articleService.addBlog(blog);
			}else {
				articleService.updBlog(blog);
			}
			
			return "redirect:/my/blogs";
		}
	}
	
	@RequestMapping("/blog/remove")
	@ResponseBody
	public Object removeBlogById(Integer id) {
		int i=articleService.removeBlogById(id);
		return i;
	}
	
	
	// 发表评论
	@RequestMapping("/comment/{id}")
	@ResponseBody
	// Integer id这个参数获取的id就是文章的id
	public Object  comment(Comments comment,@PathVariable("id")Integer id,HttpServletRequest request) {
		User loginUser = Constant.getLoginUser(request);
		comment.setBlog(new Article(id)); // 文章
		comment.setAuthor(loginUser);     // 作者
		// 完成评论的发表操作
		int i=commentService.comment(comment);
		return i;
	}
}
